#ifndef MOTOR_RECEIVE_H
#define MOTOR_RECEIVE_H
#include "main.h"
#include "DM4310.h"       //达妙电机控制函数头文件
#include "motor_control.h"//树宇电机控制函数头文件

#define CHASSIS_FDCAN hfdcan1
#define ARM_FDCAN hfdcan1

/* CAN send and receive ID */
typedef enum
{
    //机械臂电机从下往上分别命名为J1~J6
    FDCAN_ARM_ALL_ID = 0x200,
    FDCAN_2006_J6_ID = 0x201,//左
    FDCAN_2006_J5_ID = 0x202,//右

    FDCAN_DM_J4_ID = 0x002,
    FDCAN_DM_J1_ID = 0x001,

    USART_M8010_J2_ID =0,
    USART_M8010_J3_ID =1,

} motor_msg_id_e;

//rm电机统一数据结构体
typedef struct
{
    uint16_t ecd;           //转子机械角度
    int16_t speed_rpm;      //转子转速
    int16_t given_current;  //实际转矩电流
    uint8_t temperate;      //电机温度
    int16_t last_ecd;       //上次转子机械角度
    int16_t ecd_count;      //转子数
} motor_measure_t;//RM电机数据结构体

// 发送ID为0x700的CAN包,它会设置3508电机进入快速设置ID
extern void FDCAN_cmd_chassis_reset_ID(void);
//发送机械臂中M2006电机控制命令，其中rev为保留字节
extern void FDCAN_M2006_cmd_arm(int16_t motor5, int16_t motor6,int16_t rev1,int16_t rev2);//J5 J6为RM电机

//发送底盘电机控制命令
extern void FDCAN_cmd_chassis(int16_t motor1, int16_t motor2, int16_t motor3, int16_t motor4);

//返回joint1电机变量地址，通过指针方式获取达妙电机原始数据
extern const DMMotor_measure_t *get_DM_Jiont1_Measure_Point(void);
//返回joint4电机变量地址，通过指针方式获取达妙电机原始数据
extern const DMMotor_measure_t *get_DM_Joint4_Measure_Point(void);
//返回motor5电机变量地址，通过指针方式获取RM电机原始数据
extern const motor_measure_t *get_RM_motor5_Motor_Measure_Point(void);
//返回motor6电机变量地址，通过指针方式获取RM电机原始数据
extern const motor_measure_t *get_RM_motor6_Motor_Measure_Point(void);
//返回joint2电机变量地址，通过指针方式获取树宇电机原始数据
extern const MOTOR_recv *get_UN_Joint2_Motor_Measure_Point(void);
//返回joint3电机变量地址，通过指针方式获取树宇电机原始数据
extern const MOTOR_recv *get_UN_Joint3_Motor_Measure_Point(void);

#endif
